Save the expanded state of the folder browser with the file chooser
authorPeter Teichman <teichman@src.gnome.org>
Mon, 8 Jan 2007 18:34:06 +0000 (18:34 +0000)
committerPeter Teichman <teichman@src.gnome.org>
Mon, 8 Jan 2007 18:34:06 +0000 (18:34 +0000)
* gtk/gtkfilechooserdefault.c:
* gtk/gtkfilechooserprivate.h:
* gtk/gtkfilechoosersettings.c:
* gtk/gtkfilechoosersettings.h:
Save the expanded state of the folder browser with the file
chooser settings.  Resolves the expander portions of (#153828,
Lemmit Kaplinski)

svn path=/trunk/; revision=17121

ChangeLog
gtk/gtkfilechooserdefault.c
gtk/gtkfilechooserprivate.h
gtk/gtkfilechoosersettings.c
gtk/gtkfilechoosersettings.h

index b80d0f94db9974a374672f3f647d296182e61ea5..e1eb0930603d515751ad3c22ec100021855e33fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-01-08  Peter Teichman  <peter@novell.com>
+
+       * gtk/gtkfilechooserdefault.c:
+       * gtk/gtkfilechooserprivate.h:
+       * gtk/gtkfilechoosersettings.c:
+       * gtk/gtkfilechoosersettings.h:
+       Save the expanded state of the folder browser with the file
+       chooser settings.  Resolves the expander portions of (#153828,
+       Lemmit Kaplinski)
+
 2007-01-08  Emmanuele Bassi  <ebassi@gnome.org>
 
        * gtk/gtkrecentchoosermenu.c (gtk_recent_chooser_menu_create_item):
index 1e1969f7d58ae736e7b020b0aad3f09233d1c3b2..ae725844e35862d9b1cd8b3670720fef2632872c 100644 (file)
@@ -4232,6 +4232,7 @@ expander_changed_cb (GtkExpander           *expander,
                     GParamSpec            *pspec,
                     GtkFileChooserDefault *impl)
 {
+  impl->expand_folders = gtk_expander_get_expanded(GTK_EXPANDER (impl->save_expander));
   update_appearance (impl);
 }
 
@@ -5428,16 +5429,21 @@ settings_load (GtkFileChooserDefault *impl)
   GtkFileChooserSettings *settings;
   LocationMode location_mode;
   gboolean show_hidden;
+  gboolean expand_folders;
 
   settings = _gtk_file_chooser_settings_new ();
 
   location_mode = _gtk_file_chooser_settings_get_location_mode (settings);
   show_hidden = _gtk_file_chooser_settings_get_show_hidden (settings);
+  expand_folders = _gtk_file_chooser_settings_get_expand_folders (settings);
 
   g_object_unref (settings);
 
   location_mode_set (impl, location_mode, TRUE);
   gtk_file_chooser_set_show_hidden (GTK_FILE_CHOOSER (impl), show_hidden);
+  impl->expand_folders = expand_folders;
+  if (impl->save_expander)
+    gtk_expander_set_expanded (GTK_EXPANDER (impl->save_expander), expand_folders);
 }
 
 static void
@@ -5449,6 +5455,7 @@ settings_save (GtkFileChooserDefault *impl)
 
   _gtk_file_chooser_settings_set_location_mode (settings, impl->location_mode);
   _gtk_file_chooser_settings_set_show_hidden (settings, gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl)));
+  _gtk_file_chooser_settings_set_expand_folders (settings, impl->expand_folders);
 
   /* NULL GError */
   _gtk_file_chooser_settings_save (settings, NULL);
index eb18035c895422335fc09f610b5fbddadddea919..24f57e05912ee2941e40a79bbabbbedcd286b597 100644 (file)
@@ -265,6 +265,7 @@ struct _GtkFileChooserDefault
   guint list_sort_ascending : 1;
   guint changing_folder : 1;
   guint shortcuts_current_folder_active : 1;
+  guint expand_folders : 1;
 
 #if 0
   guint shortcuts_drag_outside : 1;
index e7026b9eb4ffd1562289a9cb4c227cca24272f07..e7448891c3c12d79d89bfe230ccc57d867cf1883 100644 (file)
@@ -42,6 +42,7 @@
 #define ELEMENT_TOPLEVEL       "gtkfilechooser"
 #define ELEMENT_LOCATION       "location"
 #define ELEMENT_SHOW_HIDDEN     "show_hidden"
+#define ELEMENT_EXPAND_FOLDERS  "expand_folders"
 #define ATTRIBUTE_VERSION       "version"
 #define ATTRIBUTE_MODE         "mode"
 #define ATTRIBUTE_VALUE         "value"
@@ -69,6 +70,7 @@ set_defaults (GtkFileChooserSettings *settings)
 {
   settings->location_mode = LOCATION_MODE_PATH_BAR;
   settings->show_hidden = FALSE;
+  settings->expand_folders = FALSE;
 }
 
 typedef enum {
@@ -77,7 +79,8 @@ typedef enum {
   STATE_ERROR,
   STATE_IN_TOPLEVEL,
   STATE_IN_LOCATION,
-  STATE_IN_SHOW_HIDDEN
+  STATE_IN_SHOW_HIDDEN,
+  STATE_IN_EXPAND_FOLDERS
 } State;
 
 struct parse_state {
@@ -271,6 +274,34 @@ parse_start_element_cb (GMarkupParseContext *context,
                           value_str);
            }
        }
+      else if (EQ (element_name, ELEMENT_EXPAND_FOLDERS))
+       {
+         const char *value_str;
+
+         state->state = STATE_IN_EXPAND_FOLDERS;
+
+         value_str = get_attribute_value (attribute_names, attribute_values, ATTRIBUTE_VALUE);
+
+         if (!value_str)
+           set_missing_attribute_error (state, line, col, ATTRIBUTE_VALUE, error);
+         else if (EQ (value_str, VALUE_TRUE))
+           state->settings->expand_folders = TRUE;
+         else if (EQ (value_str, VALUE_FALSE))
+           state->settings->expand_folders = FALSE;
+         else
+           {
+             state->state = STATE_ERROR;
+             g_set_error (error,
+                          G_MARKUP_ERROR,
+                          G_MARKUP_ERROR_INVALID_CONTENT,
+                          _("Line %d, column %d: expected \"%s\" or \"%s\", but found \"%s\" instead"),
+                          line,
+                          col,
+                          VALUE_FALSE,
+                          VALUE_TRUE,
+                          value_str);
+           }
+       }
       else
        set_unexpected_element_error (state, line, col, element_name, error);
 
@@ -336,6 +367,14 @@ parse_end_element_cb (GMarkupParseContext *context,
 
       break;
 
+    case STATE_IN_EXPAND_FOLDERS:
+      if (EQ (element_name, ELEMENT_EXPAND_FOLDERS))
+       state->state = STATE_IN_TOPLEVEL;
+      else
+       set_unexpected_element_end_error (state, line, col, ELEMENT_EXPAND_FOLDERS, element_name, error);
+
+      break;
+
     default:
       g_assert_not_reached ();
     }
@@ -454,11 +493,26 @@ _gtk_file_chooser_settings_set_show_hidden (GtkFileChooserSettings *settings,
   settings->show_hidden = show_hidden ? TRUE : FALSE;
 }
 
+gboolean
+_gtk_file_chooser_settings_get_expand_folders (GtkFileChooserSettings *settings)
+{
+  ensure_settings_read (settings);
+  return settings->expand_folders;
+}
+
+void
+_gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
+                                              gboolean expand_folders)
+{
+  settings->expand_folders = expand_folders ? TRUE : FALSE;
+}
+
 static char *
 settings_to_markup (GtkFileChooserSettings *settings)
 {
   const char *location_mode_str;
   const char *show_hidden_str;
+  const char *expand_folders_str;
 
   if (settings->location_mode == LOCATION_MODE_PATH_BAR)
     location_mode_str = MODE_PATH_BAR;
@@ -471,14 +525,17 @@ settings_to_markup (GtkFileChooserSettings *settings)
     }
 
   show_hidden_str = settings->show_hidden ? VALUE_TRUE : VALUE_FALSE;
+  expand_folders_str = settings->expand_folders ? VALUE_TRUE : VALUE_FALSE;
 
   return g_strdup_printf
     ("<" ELEMENT_TOPLEVEL ">\n"                                                /* <gtkfilechooser>               */
      "  <" ELEMENT_LOCATION " " ATTRIBUTE_MODE "=\"%s\"/>\n"           /*   <location mode="path-bar"/>  */
      "  <" ELEMENT_SHOW_HIDDEN " " ATTRIBUTE_VALUE "=\"%s\"/>\n"       /*   <show_hidden value="false"/> */
+     "  <" ELEMENT_EXPAND_FOLDERS " " ATTRIBUTE_VALUE "=\"%s\"/>\n"    /*   <expand_folders value="false"/> */
      "</" ELEMENT_TOPLEVEL ">\n",                                      /* </gtkfilechooser>              */
      location_mode_str,
-     show_hidden_str);
+     show_hidden_str,
+     expand_folders_str);
 }
 
 gboolean
index 47f6abba685f5648d4c1414b4338a3bcac5f6508..bde1eeeaa21bab1c178b047c7a4e2248a79b45af 100644 (file)
@@ -42,6 +42,8 @@ struct _GtkFileChooserSettings
   guint settings_read : 1;
 
   guint show_hidden : 1;
+
+  guint expand_folders : 1;
 };
 
 struct _GtkFileChooserSettingsClass
@@ -61,6 +63,10 @@ gboolean _gtk_file_chooser_settings_get_show_hidden (GtkFileChooserSettings *set
 void     _gtk_file_chooser_settings_set_show_hidden (GtkFileChooserSettings *settings,
                                                     gboolean                show_hidden);
 
+gboolean _gtk_file_chooser_settings_get_expand_folders (GtkFileChooserSettings *settings);
+void     _gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
+                                                       gboolean                expand_folders);
+
 gboolean _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
                                          GError                **error);